home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / texte / qed / src / seproto.h < prev    next >
Text File  |  1998-01-01  |  12KB  |  347 lines

  1. /*
  2.  * SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
  3.  * und Editoren.
  4.  *
  5.  * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
  6.  * zur Compilierung und ähnlichen Sachen zu veranlassen, und um Fehler-
  7.  * meldungen und/oder Fehlerdateien an den Editor zurückzugeben.
  8.  *
  9.  * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
  10.  * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
  11.  *
  12.  * Da teilweise Zeiger auf Speicherbereiche übergeben werden, ist vom
  13.  * jeweiligen Absender der Nachricht darauf zu achten, daß diese
  14.  * Speicherbereiche vom Empfänger auch lesbar sind (Memory Protection!).
  15.  * Dafür sind diese als Readable zu allozieren!
  16.  *
  17.  */
  18.  
  19. /*
  20.  * Erweiterungen
  21.  *
  22.  * Datum     Version Änderungen
  23.  *
  24.  * 30.01.96  1.01     SE_CLOSE für Dateien/Masken, mit Close-Flag
  25.  *                             msg[5] = 0 -> nur sichern
  26.  *                             msg[5] = 1 -> sichern + schließen
  27.  *                         ES/SE_PROJEKT mit leerem Argument (NULL)
  28.  *                         Um zur Version 0x100 kompatibel zu sein, sollte
  29.  *                         das Programm die Versionsnummer überprüfen!!
  30.  *
  31.  * 13.08.96  1.02     SE_OPEN mit Zeilen- und Spaltennummer
  32.  *                         neue Nachricht SE_MENU
  33.  *
  34.  * 19.11.96  1.03     bei ES_COMPILE kann der Dateiname auch NULL sein
  35.  *
  36.  * 08.01.97  1.04     SE_CLOSE: Flag 2
  37.  *                         SE_MENU: progName
  38.  *
  39.  * 23.12.97  1.05     ES_SHLCTRL neu, zur Kontrolle der Shell
  40.  *                            Dafür neuer String in SEMENUINFO.
  41.  *
  42.  */
  43.  
  44. #define SEPROTOVERSION 0x105    
  45. /*
  46.  * Die Versionsnummer des Protokolls. Highbyte ist die Major Number
  47.  * Lowbyte ist die Lower Number
  48. */
  49.  
  50.  
  51. /*
  52.  * Shell -> Editor
  53. */
  54. #define SE_INIT            0x4200
  55.     /*
  56.      * Die Shell fragt an, ob ein Editor das SE-Protokoll versteht.
  57.      * Wort 3        Ein Bitset, welche Nachrichten die Shell versendet
  58.      * Wort 4+5        Ein Bitset, welche Editorkommandos verstanden werden
  59.      * Wort 6        Unterstütze Versionsnummer des Protokolls
  60.      * Als Antwort erhält es ein ES_OK vom  Editor.
  61.      */
  62.  
  63. #define SE_OK                0x4201
  64.     /*
  65.      * Die Shell sagt dem Editor, das sie das Protokoll versteht.
  66.      * Wort 3        Ein Bitset, welche Nachrichten die Shell versendet
  67.      * Wort 4+5        Ein Bitset, welche Editorkommandos verstanden werden
  68.      * Wort 6        Unterstütze Versionsnummer des Protokolls
  69.      * Wort 7        Die ApId des Programmes, dessen Nachricht beantwortet wird
  70.      */
  71.  
  72. #define SE_ACK             0x4202
  73.     /*
  74.      * Die Shell bestätigt den Empfang eines Editorkommandos und gibt zurück,
  75.      * ob das Kommando ausgeführt wird.
  76.      * Wort 3        TRUE: Kommando wird verstanden und ausgeführt.
  77.      *                      FALSE: Das Kommando wird nicht verstanden
  78.      * Eine SE_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
  79.      * reich ausgeführt wurde. Es sagt nur, daß die Shell das Kommando
  80.      * versteht und ausführen wird!
  81.      */
  82.  
  83. #define SE_OPEN            0x4203
  84.     /*
  85.      * Die Shell sagt dem Editor, daß er einen Text öffnen soll.
  86.      * Wort 3+4        Ein Zeiger auf den Filenamen des zu öffnenden Files
  87.      * Wort 5+6        Cursorposition (Zeilennummer)
  88.      * Wort 7        Cursorposition (Spaltennummer)
  89.      * Als Antwort erhält die Shell ein ES_ACK
  90.      */
  91.  
  92. #define SE_ERROR            0x4204
  93.     /*
  94.      * Es ist ein Fehler beim Compilieren aufgetreten.
  95.      * Wort 3+4        Ein Zeiger auf eine Infostruktur, die wie folgt
  96.      *                      aufgebaut ist:
  97.      *                      Wort 0+1    Ein Zeiger auf den Namen des compilierten Textes.
  98.      *                      Wort 2+3    Ein Zeiger auf den Text der Fehlermeldung
  99.      *                      Wort 4    Die Fehlernummer
  100.      *                      Wort 5+6    Die fehlerhafte Zeile
  101.      *                      Wort 7      Die Spalte mit dem Fehler (oder 0)
  102.      * Mit ES_ACK bestätigt der Editor die Meldung.
  103.      */
  104.  
  105. #define SE_ERRFILE        0x4205
  106.     /*
  107.      * Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
  108.      * Errorfile, welches in der Message spezifiziert wird.
  109.      * Wort 3+4        Ein Zeiger auf den Filenamen des Errorfiles mit den
  110.      *                      Fehlermeldungen
  111.      * Wort 5+6        Ein Zeiger auf den Namen des compilierten Textes
  112.      * Mit ES_ACK bestätigt der Editor die Meldung.
  113.      */
  114.  
  115. #define SE_PROJECT        0x4206
  116.     /*
  117.      * Die Shell teilt dem Editor mit, daß das Projekt geändert wurde.
  118.      * Der Filename des aktuellen Projektfiles wird als Parameter übergeben
  119.      * Wort 3+4        Ein Zeiger auf den Namen des Projektfiles oder NULL.
  120.      *                 Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet 
  121.      *                    werden.
  122.      * Der Editor bestätigt mit ES_ACK.
  123.      * Eine vernünftige Reaktion des Editors wäre es in dem Fall,
  124.      * ebenfalls das Projekt zu wechseln, sofern er diese unterstützt.
  125.      */
  126.  
  127. #define SE_QUIT            0x4207
  128.     /*
  129.      * Die Shell teilt dem Editor mit, daß sie jetzt beendet wird.
  130.      * Der Editor sollte in dem Fall die Shell als Kommunikationspartner
  131.      * vergessen.
  132.      * Parameter gibt es keine.
  133.      * Es wird keine Antwort erwartet!
  134.      */
  135.  
  136. #define SE_TERMINATE       0x4208
  137.     /*
  138.      * Die Shell teilt dem Editor mit, daß dieser sich beenden soll.
  139.      * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
  140.      * normalen Terminierungsprozeß durchlaufen (und in dem auch ein ES_QUIT
  141.      * schicken!). Der Grund für so eine Meldung der Shell könnte zum Beispiel
  142.      * zu wenig Speicher zum compilieren sein.
  143.      * Mit ES_ACK bestätigt der Editor die Meldung.
  144.      */
  145.  
  146. #define SE_CLOSE              0x4209
  147.     /*
  148.      * Die Shell teilt dem Editor mit, daß dieser bestimmte Texte sichern
  149.      * bzw. schließen soll. Beim Schließen von geänderten Texten sollte der
  150.      * Editor vorher nachfragen.
  151.      * Wort 3+4        Ein Zeiger auf den Namen einer Datei oder eine Dateimaske.
  152.      *                      '*.*' steht für alle Textfenster (entspricht also dem SE_CLOSE
  153.      *                      der Protokoll-Version 0x100).
  154.      * Wort 5        Steuer-Flag:
  155.      *                        0 = nur sichern
  156.      *                          1 = sichern und schließen
  157.      *                          2 = schließen ohne sichern
  158.      * Mit ES_ACK bestätigt der Editor die Meldung.
  159.      */
  160.  
  161. #define SE_MENU            0x420A
  162.     /*
  163.      * Die Shell teilte dem Editor mit, was er für die einzelnen Programme
  164.      * in sein Menü eintragen soll.
  165.      * Word 3+4        Ein Zeiger auf eine SEMENUINFO-Struktur mit den Einträgen.
  166.      * Mit ES_ACK bestätigt der Editor die Meldung.
  167.      */
  168.  
  169.  
  170. /*
  171.  * Editor -> Shell
  172. */
  173. #define ES_INIT            0x4240
  174.     /*
  175.      * Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
  176.      * Wort 3        Ein Bitset, welche Shellnachrichten verstanden werden
  177.      * Wort 4+5        Ein Bitset, welche Editorkommandos versendet werden
  178.      * Wort 6        Unterstütze Versionsnummer des Protokolls
  179.      * Als Antwort erhält es SE_OK von der Shell
  180.      */
  181.  
  182. #define ES_OK                0x4241
  183.     /*
  184.      * Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
  185.      * Wort 3        Ein Bitset, welche Shellnachrichten verstanden werden
  186.      * Wort 4+5        Ein Bitset, welche Editorkommandos versendet werden
  187.      * Wort 6        Unterstütze Versionsnummer des Protokolls
  188.      * Wort 7        Die ApId des Programmes, dessen Nachricht beantwortet wird
  189.      */
  190.  
  191. #define ES_ACK             0x4242
  192.     /*
  193.      * Der Editor bestätigt den Empfang des Kommandos
  194.      * Wort 3        TRUE: Kommando wird verstanden und ausgeführt.
  195.      *                    FALSE: Das Kommando wird nicht verstanden
  196.      * Eine ES_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
  197.      * reich ausgeführt wurde. Es sagt nur, daß der Editor das Kommando
  198.      * versteht und ausführen wird!
  199.      */
  200.  
  201. #define ES_COMPILE        0x4243
  202.     /*
  203.      * Der Editor sagt der Shell, daß sie ein File übersetzen soll.
  204.      * Ein Pointer auf den Dateinamen wird in der Message übergeben.
  205.      * Wort 3+4        Zeiger auf den Namen der zu compilierenden Datei oder NULL.
  206.      * Diese Nachricht muß mit SE_ACK bestätigt werden.
  207.      */
  208.  
  209. #define ES_MAKE            0x4244
  210.     /*
  211.      * Der Editor sagt der Shell, daß sie ein Make ausführen soll.
  212.      * Ein Filename kann in der Message übergeben werden, muß aber nicht 
  213.      * gesetzt sein und muß von der Shell auch nicht beachtet werden!
  214.      * Wort 3+4        Zeiger auf den Namen des Makefiles oder NULL.
  215.      * Die Shell bestätigt mit SE_ACK.
  216.      */
  217.  
  218. #define ES_MAKEALL        0x4245
  219.     /*
  220.      * Der Editor sagt der Shell, daß ein komplettes Make All ausgeführt
  221.      * werden soll. Ein Filename für das Makefile kann (muß nicht) in
  222.      * der Message übergeben werden.
  223.      * Wort 3+4        Zeiger auf den Namen des Makefiles oder NULL.
  224.      * Die Shell bestätigt mit SE_ACK.
  225.      */
  226.  
  227. #define ES_LINK            0x4246
  228.     /*
  229.      * Der Editor sagt der Shell, daß das Programm gelinkt werden soll. 
  230.      * Ein Filename kann in der Message übergeben werden, muß aber nicht 
  231.      * unbedingt beachtet werden von der Shell!
  232.      * Wort 3+4        Zeiger auf den Namen der Source oder NULL.
  233.      * Die Shell bestätigt mit SE_ACK.
  234.      */
  235.  
  236. #define ES_EXEC            0x4247
  237.     /*
  238.      * Der Editor sagt der Shell, daß das Programm zu der Source ausgeführt 
  239.      * werden soll. Ein Filename kann übergeben werden, muß von der Shell 
  240.      * aber nicht beachtet werden.
  241.      * Wort 3+4        Zeiger auf den Namen des auszuführenden Files oder NULL.
  242.      *                      Bei einer Sourcedatei ist diese ggf. noch zu compilieren 
  243.      *                    und/oder zu linken.
  244.      * Die Shell bestätigt mit SE_ACK.
  245.      */
  246.  
  247. #define ES_MAKEEXEC        0x4248
  248.     /*
  249.      * Die Shell soll ein Make ausführen und danach das Programm ausführen.
  250.      * Ein Filename für das Makefile kann (muß nicht) in der Message
  251.      * übergeben werden.
  252.      * Wort 3+4        Zeiger auf den Namen des Makefiles oder NULL.
  253.      * Die Shell bestätigt mit SE_ACK.
  254.      */
  255.  
  256. #define ES_PROJECT        0x4249
  257.     /*
  258.      * Der Editor teilt der Shell mit, daß das Project geändert/gewechselt
  259.      * wurde. Der Filename des  Projektfiles wird als Parameter in der Message
  260.      * übergeben. 
  261.      * Wort 3+4        Zeiger auf den Namen des Projektfiles oder NULL.
  262.      *                    Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet
  263.      *                 werden.
  264.      * Die Shell bestätigt mit SE_ACK.
  265.      * Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls
  266.      * das Projekt zu wechseln, sofern sie diese unterstützt.
  267.      */
  268.  
  269. #define ES_QUIT            0x424A
  270.     /*
  271.      * Der Editor teilt der Shell mit, daß er jetzt beendet wird. Die Shell 
  272.      * sollte in dem Fall den Editor als Kommunikationspartner vergessen.
  273.      * Parameter gibt es keine.
  274.      * Es wird keine Antwort erwartet!
  275.      */
  276.  
  277. #define ES_SHLCTRL        0x424B
  278.     /*
  279.      * Sonstige Kontrolle der Shell durch den Editors.
  280.      * Wort 3+4        Zeiger auf den Namen des obersten Fensters des Editors
  281.      *             oder NULL.
  282.      * Wort 5        Steuer-Flag:
  283.      *                        0: Shell soll sich toppen (Menü/Fenster).
  284.      * Die Shell bestätigt mit SE_ACK.
  285.      */
  286.  
  287.  
  288. /*
  289.  * Shell-Kommando-Bits 
  290.  */
  291. #define _SEINIT        0x0001
  292. #define _SEOK            0x0002
  293. #define _SEACK         0x0004
  294. #define _SEOPEN        0x0008
  295. #define _SEERROR        0x0010
  296. #define _SEERRFILE    0x0020
  297. #define _SEPROJECT    0x0040
  298. #define _SEQUIT        0x0080
  299. #define _SETERMINATE 0x0100
  300. #define _SECLOSE        0x0200
  301. #define _SEMENU        0x0400
  302.  
  303. /*
  304.  * Editor-Kommando-Bits
  305.  */
  306. #define _ESINIT        0x0001
  307. #define _ESOK            0x0002
  308. #define _ESACK         0x0004
  309. #define _ESCOMPILE    0x0008
  310. #define _ESMAKE        0x0010
  311. #define _ESMAKEALL    0x0020
  312. #define _ESLINK        0x0040
  313. #define _ESEXEC        0x0080
  314. #define _ESMAKEEXEC    0x0100
  315. #define _ESPROJECT    0x0200
  316. #define _ESQUIT        0x0400
  317. #define _ESSHLCTRL    0x0800
  318.  
  319.  
  320.  
  321. /*
  322.  * Die Nachricht SE_ERROR liefert einen Zeiger auf diese Struktur:
  323.  */
  324. typedef struct
  325. {
  326.     char    *errFile;            /* Zeiger auf den Namen der compilierten Datei */
  327.     char    *errMess;            /* Zeiger auf die Fehlermeldung */
  328.     int    errNum;                /* Die Fehlernummer */
  329.     long    errLine;             /* Die fehlerhafte Zeile */
  330.     int    errRow;                /* Die Spalte mit dem Fehler (oder 0) */
  331. } ERRINFO;
  332.  
  333. /*
  334.  * Die Nachricht SE_MENU verwendet einen Zeiger auf diese Struktur:
  335.  */
  336. typedef struct
  337. {
  338.     char    *compStr;
  339.     char    *makeStr;
  340.     char    *makeAllStr;
  341.     char    *linkStr;
  342.     char    *execStr;
  343.     char    *makeExecStr;
  344.     char    *progName;
  345.     char    *shellCtrlStr;     /* neu für ES_SHLCTRL ab 0x105 */
  346. } SEMENUINFO;
  347.